import 'package:safemap/safemap.dart';

/*  实时数据 8 bytes

    uint16_t voltage;               //电压         单位 0.01V（来自驱动板）
    int16_t charge_current;         //充电电流         单位 0.01A（来自驱动板）
    int16_t discharge_current;      //放电电流         单位 0.01A（来自驱动板）

    //6个状态位
    uint16_t state_detected       : 1; //0 电池信号无效   1 电池信号有效  （来自驱动板，对于有通讯的电池即为电池通讯状态）
    uint16_t state_enable         : 1; //0 电池未开启     1 电池开启      （来自驱动板）
    uint16_t state_charge         : 1; //0 未充电状态     1 充电状态      （来自驱动板）
    uint16_t state_reserve        : 3; //保留

    //10个故障或警告位
    uint16_t error_logic             : 1; //0 信号逻辑正常   1 信号逻辑错误（电池信号存在，但电压低于一定值 或者 电池信号不存在，但电压高于一定值）
    uint16_t error_signal            : 1; //0 电池未报错     1 电池报错（只有不含通讯的电池有此故障）
    uint16_t error_voltage_sensor    : 1; //0 电压传感器正常 1 电压传感器故障（来自驱动板）
    uint16_t error_current_sensor    : 1; //0 电流传感器正常 1 电流传感器故障（来自驱动板）
    uint16_t error_cannot_charge     : 1; //0 未发现无法充电 1 电池无法充电故障（来自驱动板）
    uint16_t battery_warning         : 1; //BMS 有报警信息（来自BMS）
    uint16_t battery_protect         : 1; //BMS 触发保护（来自BMS）
    uint16_t battery_error           : 1; //BMS 有故障信息（来自BMS）
    uint16_t error_reserve           : 2; //保留

*/
class BatteryPackModel {
  int voltage = 0;
  int chargeCurrent = 0;
  int dischargeCurrent = 0;
  bool stateDetected = false;
  bool stateEnable = false;
  bool stateCharge = false;

  bool errorLogic = false;
  bool errorSignal = false;
  bool errorVoltageSensor = false;
  bool errorCurrentSensor = false;
  bool errorCannotCharge = false;
  bool batteryWarning = false;
  bool batteryProtect = false;
  bool batteryError = false;

  BatteryPackModel.fromMap(Map<String, dynamic> m) {
    SafeMap map = SafeMap(m);
    voltage = map['voltage'].toInt ?? 0;
    chargeCurrent = map['chargeCurrent'].toInt ?? 0;
    dischargeCurrent = map['dischargeCurrent'].toInt ?? 0;
    stateDetected = map['stateDetected'].boolean;
    stateEnable = map['stateEnable'].boolean;
    stateCharge = map['stateCharge'].boolean;
    errorLogic = map['errorLogic'].boolean;
    errorSignal = map['errorSignal'].boolean;
    errorVoltageSensor = map['errorVoltageSensor'].boolean;
    errorCurrentSensor = map['errorCurrentSensor'].boolean;
    errorCannotCharge = map['errorCannotCharge'].boolean;
    batteryWarning = map['batteryWarning'].boolean;
    batteryProtect = map['batteryProtect'].boolean;
    batteryError = map['batteryError'].boolean;
  }
}
